<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //核心原理：通过call()把父类型的this指向子类型的this，这样实现子类型继承父类型的属性
        //1.父构造函数
        function Father(uname,age){
            //this指向父构造函数的对象实例
            this.uname = uname;
            this.age = age;
        }
        Father.prototype.money = function(){
            console.log(10000);
        }
        //2.子构造函数
        function Son(uname,age){
            //this指向子构造函数的对象实例
            Father.call(this,uname,age);
        }
        // Son.prototype = Father.prototype;//这样赋值会有问题，如果修改子原型对象，父元素对象也会跟着一起变0化
        Son.prototype = new Father();
        //如果利用对象形式修改了原型对象，别忘了利用constructor指回原来的构造函数
        Son.prototype.constructor = Son;
        //子构造函数专门的方法
        Son.prototype.exam = function(){
            console.log("孩子要考试");
        }
        var son =new Son("刘德华",18);
        console.log(son);
        console.log(Father.prototype);
    </script>
</body>
</html>